package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Atividade;
import ControleAcademico.Model.Pojo.HistoricoAtividade;
import ControleAcademico.Model.Pojo.Turma;

public class AtividadeImpl implements AtividadeDao {
	
	private ArrayList<Atividade> listaDeAtividades;
	private TurmaImpl turmaImpl;
	private HistoricoAtividadeImpl historicoAtividadeImpl;
	
	public AtividadeImpl () {
		listaDeAtividades = new ArrayList<Atividade>();
	}
	
	@Override
	public void salvar(Atividade atividade, int flag){
		
		try{
			if (flag != -1) {
				listaDeAtividades.add(atividade);
			} else {
				PrintWriter p = new PrintWriter("Atividades.txt");
				
				for(Atividade atividades : listaDeAtividades){
					p.write(atividades.getId()+"\t");
					p.write(atividades.getNome()+"\t");
					p.write(atividades.getTipo()+"\t");
					p.write(atividades.getData()+"\t");
					p.write(atividades.getValor()+"\t");

					Turma turma = atividades.getTurma();
					p.write("Turma\t");
					p.write(turma.getId()+"\t");
					p.write ("HistoricoAtividades\t");
					
					for(HistoricoAtividade i : atividades.getHistoricosAtividade()){
						p.write(i.getId()+"\t");
					}
					p.write("#");
					p.write("\n");
				}	
				
				p.close();
			}
		}catch(Exception e){
			
		}		
	}

	public ArrayList<Atividade> getListaDeAtividades() {
		return listaDeAtividades;
	}
	
	public Atividade pesquisarArquivo(int id){
		String linha;
		String identificador = id + "";
		Atividade atividade = null;
		double valor = 0.0;
		
		try{
			FileReader reader = new FileReader("Atividades.txt");    	
	        BufferedReader leitor = new BufferedReader(reader);
	        
	        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");
	        	
	        	if(dados[0].equals(identificador)){
	        		valor = Double.parseDouble(dados[4]);
	        		atividade = new Atividade(dados[1],dados[2], dados[3], valor, id);
	        		return atividade;
	        	}
	        }
		}catch(Exception e){
			
		}
        return atividade;
	}
	
	@Override
	public void carregar() {
		
	      String linha = null; 

	      try {  
	    	 FileReader reader = new FileReader("Atividades.txt");    	
	         BufferedReader leitor = new BufferedReader(reader);  
	         Turma turma = null;
	         Atividade atividade = null;
	         HistoricoAtividade historicoAtividade;

	         while ((linha = leitor.readLine()) != null) {  
	            String[] dados = linha.split("\t");
	            int identificador = Integer.parseInt(dados[0]);
	            
	            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
	            	atividade = new Atividade (dados[1], dados[2], dados[3], Double.parseDouble(dados[4]), Integer.parseInt(dados[0]));
	            	
	            	if(!turmaImpl.pesquisarNaListaImpl(Integer.parseInt(dados[6]))){
	            		turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[6]));
	            		turmaImpl.adicionarTurma(turma);
	            	} else {
	            		
	            		for (Turma i : turmaImpl.getTurmas()) {
							if (i.getId() == identificador){
								turma = i;
								break;
							}
						}
	            	}

	            	atividade.setTurma(turma);
	            	int i = 8;
	            	
	            	while (!(dados[i].equals("#"))) { 
		            	historicoAtividade= historicoAtividadeImpl.pesquisarHistoricoAtividade(Integer.parseInt(dados[i]));
		            	atividade.adicionarHistoricoAtividade(historicoAtividade);
		            	i++;
		            }
	            	listaDeAtividades.add(atividade);
	            } else {
	            	for (Atividade i : listaDeAtividades) {
						if (i.getId() == identificador){
							atividade = i;
						}
					}
	            	if(!turmaImpl.pesquisarNaListaImpl(Integer.parseInt(dados[6]))){
	            		turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[6]));
	            		turmaImpl.adicionarTurma(turma);
	            	}
	            	else{
	            		for (Turma i : turmaImpl.getTurmas()) {
							if (i.getId() == identificador){
								turma = i;
								break;
							}
						}
	            	}
	            	atividade.setTurma(turma);
	            	int i = 8;
	            	
	            	while (!(dados[i].equals("#"))) { 
		            	historicoAtividade= historicoAtividadeImpl.pesquisarHistoricoAtividade(Integer.parseInt(dados[i]));
		            	atividade.adicionarHistoricoAtividade(historicoAtividade);
		            	i++;
		            }
	            }
	         }  
	         leitor.close();  
	         reader.close();  
	      } catch (Exception e) { 
	    	  
	      }  
	  }
	
	public void setTurmaImpl (TurmaImpl turmaImpl) {
		this.turmaImpl = turmaImpl;
	}
	
	public void setHistoricoAtividadeImpl (HistoricoAtividadeImpl historicoAtividadeImpl) {
		this.historicoAtividadeImpl = historicoAtividadeImpl;
	}
	
	public void adicionarAtividade(Atividade atividade){
		this.listaDeAtividades.add(atividade);
	}
	
	public boolean pesquisarNaListaImpl(int id){
		
		for (Atividade atividade: listaDeAtividades) {
			if (atividade.getId() == id){
				return true;		
			}
		}
		return false;
	}
	
	public Atividade pesquisarAtividade(int id){
		Atividade atividade= null;
		
		for (Atividade i : listaDeAtividades) {
			if (i.getId() == id){
				atividade = i;
				return atividade;		
			}
		}
		return atividade;
	}
	
}